package com.app.test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.app.leaktest.R
import com.app.test.leak.LeakActivity

/**
 * 内存泄漏测试Activity
 * 内存泄漏的根本原因是应用程序不再需要使用的对象无法得到释放导致的，本例中设计几种场景来模拟内存泄漏
 * 可以在模拟泄漏后，使用Profiler进行初步分析，然后导出hprof，使用MAT进行详细分析（需要使用hprof-conv.exe转换）
 * hprof-conv.exe位于platform-tools\hprof-conv.exe，使用如：hprof-conv.exe memory.hprof memory2.hprof
 *
 * @author lucher
 * @since 2023-05-27
 */
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /**
     * 内存泄漏测试1次
     */
    fun onTestClick(view: View) {
        var intent = Intent(this, LeakActivity::class.java)
        startActivity(intent)
    }

    /**
     * 内存泄漏测试20次
     * 为了直接把应用干到内存溢出崩溃(是否崩溃取决于设备的内存大小，可根据情况调整)
     */
    fun onTestTimesClick(view: View) {
        for (i in 0 until 20) {
            Thread {
                var intent = Intent(this, LeakActivity::class.java)
                startActivity(intent)
            }.start()
        }
    }
}